package com.demo.cms.service;

import java.util.List;

import com.demo.cms.model.ArticleContent;
import com.demo.cms.service.exception.ArticleContentCreateException;

/**
 * 文章内容服务接口
 * 文章内容接口提供文章内容的访问服务
 * 
 * @author ryuu.kk
 *
 */
public interface ArticleContentService {

	/**
	 * 保存文章内容
	 * 一篇文章可能会有1~n个内容
	 * @param content 文章内容
	 * @return 外键ID
	 */
	Long add(ArticleContent content) throws ArticleContentCreateException;
	
	/**
	 * 保存文章所有内容
	 * 一篇文章所包含的所有内容
	 * @param contents 文章内容列表
	 */
	void addAll(ArticleContent... contents) throws ArticleContentCreateException;
	
	/**
	 * 取得文章的所有内容
	 * 该方法应用于：
	 * 1.不分页查询文章所有内容.
	 * 2.编辑文章时,查看内容
	 * @param articleId 文章外键ID
	 * @return 文章内容列表
	 */
	List<ArticleContent> findList(Long articleId);
	
	/**
	 * 查询文章内容
	 * 该方法查询多页文章中的一页
	 * @param articleId 文章ID
	 * @param index 文章内容在总内容中的位置(索引)
	 * @return 文章内容
	 */
	ArticleContent find(Long articleId, int index);
	
	/**
	 * 更新文章内容
	 * @param content 文章内容
	 * @param id 外键ID
	 */
	void update(ArticleContent content, Long id);
	
	/**
	 * 更新文章内容
	 * @param content 文章内容
	 * @param articleId 文章ID
	 * @param index 文章内容索引
	 */
	void update(ArticleContent content, Long articleId, int index);
	
	/**
	 * 更新文章内容
	 * @param contents 文章内容列表
	 * @param articleId 文章ID
	 */
	void update(List<ArticleContent> contents, Long articleId);
	
	/**
	 * 删除文章的所有内容
	 * @param articleId 文章ID
	 */
	void deleteAll(Long articleId);
	
	/**
	 * 删除文章指定的内容
	 * @param id 文章内容外键ID
	 */
	void delete(Long id);
	
	/**
	 * 删除文章的指定内容
	 * @param articleId 文章ID
	 * @param index 文章内容索引
	 */
	void delete(Long articleId, int index);
}
